//
//  UIbutton-Extensions.swift
//  SwiftWB
//
//  Created by luozhijun on 2016/10/1.
//  Copyright © 2016年 luozhijun. All rights reserved.
//

import UIKit

let buttonHighlightImageNameSuffix = "_highlighted"

extension UIButton {
    // 以前OC的给一个系统的类添加工具方法时, 一般是在Category中以类方法的形式实现;
    // 而Swift没有Category, 取而代之的是Extension, 并且很多时候用构造函数的形式扩种功能;
    
    // 类方法的形式, Swift中不推荐
    class func instance(imageName: String, bgImageName: String) -> UIButton {
        let button = UIButton()
        button.setImage(UIImage(named: imageName), forState: .Normal)
        button.setImage(UIImage(named: imageName + buttonHighlightImageNameSuffix), forState: .Highlighted)
        button.setBackgroundImage(UIImage(named: bgImageName), forState: .Normal)
        button.setBackgroundImage(UIImage(named: bgImageName + buttonHighlightImageNameSuffix), forState: .Highlighted)
        button.sizeToFit()
        
        return button
    }
    
    
    // 更好的方法是用构造函数
    // 扩展系统sdk中的类时, 须加上convenience关键字
    /**
     便利构造函数的特点
        1. 通常用在extension中
        2. 需要以convenience标识
        3. 需要函数入口处明确调用self.init()
     */
    
    /**
     便利构造函数, 通过给定的图片名和背景图片名来创建一个custom type的button, @note 将使用当前文件定义的buttonHighlightImageNameSuffix来生成对应高亮图片名, 并且会调用sizeToFit()调整button的尺寸
     
     - parameter imageName:   图片名
     - parameter bgImageName: 背景图片名
     */
    convenience init(imageName: String, bgImageName: String) {
        self.init()
        
        setImage(UIImage(named: imageName), forState: .Normal)
        setImage(UIImage(named: imageName + buttonHighlightImageNameSuffix), forState: .Highlighted)
        setBackgroundImage(UIImage(named: bgImageName), forState: .Normal)
        setBackgroundImage(UIImage(named: bgImageName + buttonHighlightImageNameSuffix), forState: .Highlighted)
        sizeToFit()
    }
}
